package com.czm.art_light.constant;

import lombok.AllArgsConstructor;
import lombok.Getter;

import java.util.ArrayList;

/**
 * 错误码枚举类。
 * <p>
 * 错误码为字符串类型，共 5 位，分成两个部分：错误产生来源+四位数字编号。 错误产生来源分为 A/B/C， A 表示错误来源于用户，比如参数错误，用户安装版本过低，用户支付 超时等问题； B
 * 表示错误来源于当前系统，往往是业务逻辑出错，或程序健壮性差等问题； C 表示错误来源 于第三方服务，比如 CDN 服务出错，消息投递超时等问题；四位数字编号从 0001 到 9999，大类之间的
 * 步长间距预留 100。
 * <p>
 * 错误码分为一级宏观错误码、二级宏观错误码、三级宏观错误码。 在无法更加具体确定的错误场景中，可以直接使用一级宏观错误码。
 */
@Getter
@AllArgsConstructor
public enum ArtErrorCodeEnum {

    /**
     * 正确执行后的返回
     */
    OK("00000", "一切正常"),

    /**
     * 一级宏观错误码，用户端错误
     */
    USER_ERROR("A0001", "用户端错误"),

    /**
     * 用户未找到艺术作品
     */
    USER_ARTWORK_NOT_FOUND("A0101", "未找到艺术作品"),

    /**
     * 用户请求参数错误
     */
    USER_INVALID_PARAM("A0102", "请求参数错误"),

    /**
     * 用户未授权访问艺术作品
     */
    USER_UNAUTHORIZED("A0103", "未授权访问"),

    /**
     * 用户请求艺术作品服务异常
     */
    USER_REQ_EXCEPTION("A0104", "请求艺术作品服务异常"),

    /**
     * 用户请求过于频繁
     */
    USER_REQ_TOO_MANY("A0105", "请求过于频繁，请稍后重试"),

    /**
     * 值未有对应的枚举
     */
    VALUE_NOT_Enum("A0106", "值未有对应的枚举"),

    /**
     * 用户恶意行为
     */
    USER_MalicIOUS_BEHAVIOR("A0107", "What do you think you're playing at?"),

    /**
     * 无效的搜索（没有关键字或者关键字为空字符串）
     */
    INVALID_KEYWORD("A0108","无效的搜索"),

    /**
     * 用户收藏艺术作品异常
     */
    USER_FAVORITE_ERROR("A0200", "收藏艺术作品异常"),

    /**
     * 用户已收藏该艺术作品
     */
    USER_FAVORITE_EXISTS("A0201", "已收藏该艺术作品"),

    /**
     * 用户反馈异常
     */
    USER_FEEDBACK_ERROR("A0300", "用户反馈异常"),

    /**
     * 用户上传文件异常
     */
    USER_UPLOAD_FILE_ERROR("A0700", "用户上传文件异常"),

    /**
     * 用户上传文件类型不匹配
     */
    USER_UPLOAD_FILE_TYPE_NOT_MATCH("A0701", "用户上传文件类型不匹配"),

    /**
     * 艺术作品不存在
     */
    ARTWORK_NOT_EXIST("A1100", "艺术作品不存在"),

    /**
     * 艺术作品上传错误
     */
    ARTWORK_UPLOAD_ERROR("A1101", "艺术作品上传错误"),

    /**
     * 艺术作品上传类型不匹配
     */
    ARTWORK_UPLOAD_TYPE_NOT_MATCH("A1102", "艺术作品上传类型不匹配"),



    /**
     * 话题创建失败
     */
    TOPIC_CREATE_FAILED("A1201", "话题创建失败"),

    /**
     * 话题不存在
     */
    TOPIC_NOT_EXIST("A1202", "话题不存在"),

    /**
     * 话题更新失败
     */
    TOPIC_UPDATE_FAILED("A1203", "话题更新失败"),


    /**
     * 类别创建失败
     */
    CATEGORY_CREATE_FAILED("A1301", "类别创建失败"),

    /**
     * 类别不存在
     */
    CATEGORY_NOT_EXIST("A1302", "类别不存在"),

    /**
     * 类别更新失败
     */
    CATEGORY_UPDATE_FAILED("A1303", "类别更新失败"),


    /**
     * 艺术家创建失败
     */
    ARTIST_CREATE_FAILED("A1401", "艺术家创建失败"),

    /**
     * 艺术家不存在
     */
    ARTIST_NOT_EXIST("A1402", "艺术家不存在"),

    /**
     * 艺术家更新失败
     */
    ARTIST_UPDATE_FAILED("A1403", "艺术家更新失败"),

    /**
     * 流派创建失败
     */
    MOVEMENT_CREATE_FAILED("A1501", "流派创建失败"),

    /**
     * 流派不存在
     */
    MOVEMENT_NOT_EXIST("A1502", "流派不存在"),

    /**
     * 流派更新失败
     */
    MOVEMENT_UPDATE_FAILED("A1503", "流派更新失败"),

    /**
     * 用户创建失败
     */
    USER_CREATE_FAILED("A1601", "用户创建失败"),

    /**
     * 用户不存在
     */
    USER_NOT_EXIST("A1602", "用户不存在"),

    /**
     * 用户更新失败
     */
    USER_UPDATE_FAILED("A1603", "用户更新失败"),

    /**
     * 用户登录已过期
     */
    USER_LOGIN_EXPIRED("A1604", "用户登录已过期"),

    /**
     * 用户账号不存在
     */
    USER_ACCOUNT_NOT_EXIST("A1605", "用户账号不存在"),

    /**
     * 用户账号异常
     */
    USER_ACCOUNT_EXCEPTION("A1606", "用户账号异常"),

    /**
     * 添加反馈内容失败
     */
    FEEDBACK_ADD_ERROR("A1701", "添加反馈内容失败"),

    /**
     * 无效的联系方式
     */
    INVALID_CONTACT_INFO("A1702", "无效的联系方式"),

    /**
     * 无效的反馈内容
     */
    INVALID_FEEDBACK_CONTENT("A1703", "无效的反馈内容"),

    /**
     * 无效的反馈图片链接（JSON 数组格式）
     */
    INVALID_FEEDBACK_IMAGE_LINKS("A1704", "无效的反馈图片链接"),


    /**
     * 一级宏观错误码，系统执行出错
     */
    SYSTEM_ERROR("B0001", "系统执行出错"),

    /**
     * 一级宏观错误码，系统解析出错
     */
    SYSTEM_PARSE_ERROR("B0002", "系统解析出错"),


    /**
     * 二级宏观错误码，系统执行超时
     */
    SYSTEM_TIMEOUT_ERROR("B0100", "系统执行超时"),

    /**
     * JSON 序列化异常
     */
    JSON_SERIALIZE_ERROR("B0200", "JSON 序列化异常"),

    /**
     * JSON 反序列化异常
     */
    JSON_DESERIALIZE_ERROR("B0201", "JSON 反序列化异常"),

    /**
     * ES中艺术作品信息 更新失败
     */
    ES_UPDATE_ARTWORK_ERROR("B0300", "ES中艺术作品信息更新失败"),

    /**
     * 获取分布式锁失败
     */
    GET_LOCK_ERROR("B0400","获取分布式锁失败"),

    /**
     * 下载量更新失败
     */
    DOWNLOAD_COUNT_UPDATE_ERROR("B0500", "下载量更新失败"),

    /**
     * 分享量更新失败
     */
    SHARE_COUNT_UPDATE_ERROR("B0501", "分享量更新失败"),

    /**
     * 点击量更新失败
     */
    CLICK_COUNT_UPDATE_ERROR("B0502", "点击量更新失败"),

    /**
     * 喜欢量更新失败
     */
    LIKE_COUNT_UPDATE_ERROR("B0503", "喜欢量更新失败"),

    /**
     * 数据库异常
     */
    DATABASE_ERROR("B0600", "数据库异常"),

    /**
     * 布隆过滤器初始化失败
     */
    BLOOM_FILTER_INIT_ERROR("B0701", "布隆过滤器初始化失败"),

    /**
     * 唯一键冲突（通常为设计问题，需检查表结构）
     */
    UNIQUE_KEY_CONFLICT_ERROR("B0700", "唯一键冲突"),


    /**
     * 一级宏观错误码，调用第三方服务出错
     */
    THIRD_PARTY_SERVICE_ERROR("C0001", "调用第三方服务出错");


    /**
     * 错误码
     */
    private final String code;

    /**
     * 中文描述
     */
    private final String message;

}